package com.jcli.util._获取并保存窗体大小;

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.prefs.Preferences;

/**
 * 记录窗体大小，下次打开还原
 *
 * 你是想在程序关闭时保存窗体的大小，下次程序启动时读取并应用保存的大小吗？
 * 如果是这样的话，你可以使用 Java 的 Preferences 类。
 * 这个类允许你存储和检索用户和系统首选项和配置数据。
 * 演示如何使用 Preferences 类保存和读取窗体的大小：
 * 在这个例子中，我们使用 Preferences 存储窗体的宽度和高度。
 * 在构造方法中，我们从 Preferences 中读取宽度和高度，然后应用到窗体。
 * 我们还添加了一个组件监听器，以便在窗体大小变化时保存新的大小。
 * 窗体关闭时也会触发保存操作。
 */
public class WindowSizeRecorder01 extends JFrame {
    private static final String WIDTH_KEY = "width";
    private static final String HEIGHT_KEY = "height";

    public WindowSizeRecorder01() {
        // 设置标题
        setTitle("窗体大小记录器");

        // 设置窗体关闭时的操作
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 从 Preferences 中读取窗体大小
        Preferences prefs = Preferences.userNodeForPackage(WindowSizeRecorder01.class);
        int width = prefs.getInt(WIDTH_KEY, 300);
        int height = prefs.getInt(HEIGHT_KEY, 200);

        // 设置窗体大小
        setSize(width, height);

        // 设置窗体位置
        setLocationRelativeTo(null);

        // 添加窗体大小变化监听器
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                saveWindowSize();
            }
        });

        // 添加窗体关闭监听器
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                saveWindowSize();
            }
        });

        // 设置可见性
        setVisible(true);
    }

    private void saveWindowSize() {
        // 保存窗体大小到 Preferences
        Preferences prefs = Preferences.userNodeForPackage(WindowSizeRecorder01.class);
        prefs.putInt(WIDTH_KEY, getWidth());
        prefs.putInt(HEIGHT_KEY, getHeight());
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new WindowSizeRecorder01());
    }
}
